package br.com.automed.bean;

import java.io.Serializable;

import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpSession;

import br.com.automed.entity.Usuario;
import br.com.automed.form.AutenticaUsuarioForm;
import br.com.automed.jpautil.JPAUtil;
import br.com.automed.service.UsuarioBusiness;
import br.com.automed.util.Constantes;
import br.com.automed.util.Mail;
import br.com.automed.util.Navegacao;
import br.com.automed.util.Util;

@Named
@RequestScoped
public class AutenticaUsuarioBean implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 9007876066857659250L;
	
	private AutenticaUsuarioForm form;
	@Inject
	private UsuarioLogadoBean bean;
	
	public String autenticarUsuario(){
		
		Usuario user = UsuarioBusiness.findUsuario(form.getUsuario());
		
		String navegacao = null;
		
		if(user != null){
			user.setNum_acessos(user.getNum_acessos() + 1);
			JPAUtil.update(user);
			if(user.getPerfil().getTipoPerfil().equals(Constantes.ADMINISTRADOR)){
				navegacao = Navegacao.HOME_ADMINISTRADOR;
			}else if(user.getPerfil().getTipoPerfil().equals(Constantes.FUNCIONARIO)){				
				navegacao = Navegacao.HOME_FUNCIONARIO;
			}else if(user.getPerfil().getTipoPerfil().equals(Constantes.PACIENTE)){
				navegacao = Navegacao.HOME_PACIENTE;
			}
			bean.getForm().setUsuario(user);
		}else{
			Util.gerarMensagem(Util.getMessage("display.home.msg.acesso.negado", null), "senha");
		}
		
			
		return navegacao;	
	}
	
	public String finalizarSessao(){
		
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
		session.invalidate();
		bean.getForm().setUsuario(null);
		
		return Navegacao.LOGOUT;
	}
	
	public void reenviarEmail(){
		Mail.reenviarEmail(form.getEmail());
	}
	
	public void limpaCampo(){
		form.setEmail(null);
	}
	
	public AutenticaUsuarioBean() {
		form = new AutenticaUsuarioForm();
	}

	public AutenticaUsuarioForm getForm() {
		return form;
	}

	public void setForm(AutenticaUsuarioForm form) {
		this.form = form;
	}
	
}